package model

import (
	"encoding/json"
	"errors"
	ClickHouse "gin/database"
)

type Options struct {
	ID     int64  `json:"id" gorm:"column:id"`         // 配置ID
	Code   string `json:"code" gorm:"column:code"`     // 配置code
	Name   string `json:"name" gorm:"column:name"`     // 配置名称
	Type   string `json:"type" gorm:"column:type"`     // 配置类型
	Config string `json:"config" gorm:"column:config"` // 配置设置
	Uuid   string `json:"uuid" gorm:"column:uuid"`     // 全局唯一标识符
}

func (m *Options) TableName() string {
	return "options"
}

// GetConfig 通过name获取module
func (m *Options) GetConfig(name string) (config map[string]string, err error) {
	//工单状态范围限制
	var optionsConfig string
	err = ClickHouse.DB.Model(&m).Where("name =? ", name).Select("config").
		Find(&optionsConfig).Error
	if err != nil {
		return
	}

	err = json.Unmarshal([]byte(optionsConfig), &config)

	if err != nil {
		return
	}
	return
}

// GetConfigItem 通过获取config 子项
func (m *Options) GetConfigItem(name string, item string) (value string, err error) {
	configMap, err := m.GetConfig(name)
	value, ok := configMap[item]
	if !ok {
		err = errors.New("config not find item")
	}
	return
}

//getOptionsConfigMultiItemData 获取多个config 子项
func (m *Options) GetOptionsConfigMultiItemData(name string, item []string) (config map[string]string, err error) {
	configMap, err := m.GetConfig(name)

	config = map[string]string{}

	for _, itemValue := range item {
		if _, ok := configMap[itemValue]; ok {
			config[itemValue] = configMap[itemValue]
		}
	}
	return
}
